#pragma once

#include <memory>

#include "Base.h"
#include "Status.h"

namespace streamdb {

template<typename T>
class SequenceStream { 
public:
    virtual ~SequenceStream() {}

    virtual Status append(const T & obj) = 0;
    virtual uint64_t getSize() const = 0;

    typedef Iterator<T> IteratorType ;

    virtual std::shared_ptr<IteratorType> advance(int64_t offset)  = 0;
    virtual std::shared_ptr<IteratorType> begin()  = 0;
};

}//namespace streamdb
